package com.evan.idempotent.warpper;

import com.evan.idempotent.exception.IdempotentException;

import java.util.function.Supplier;

/**
 * @Description: 包装Supplier函数
 * @Author liudeguang
 */
public interface IdempotentSupplier<T> extends Supplier<T> {

    /**
     * 具体需要被调用的
     *
     * @param key 幂等键
     * @param ex  异常
     * @return
     */
    default T get(String key, IdempotentException ex) {
        return runTask(key, ex);
    }

    /**
     * 任务体
     *
     * @param key 幂等键
     * @param ex  异常
     * @return
     */
    public abstract T runTask(String key, IdempotentException ex);

    /**
     * 重写父类，不使用的方法
     *
     * @return
     */
    @Override
    @Deprecated
    default T get() {
        return null;
    }
}
